/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.hogent.iii.project.server.berichthandlers;

import be.hogent.iii.project.common.bericht.Bericht;
import be.hogent.iii.project.common.bericht.GameStartBericht;
import be.hogent.iii.project.common.bericht.GameVolgendeBeurtBericht;
import be.hogent.iii.project.common.bericht.SpelenLijstBericht;
import be.hogent.iii.project.common.bericht.SpelersLijstBericht;
import be.hogent.iii.project.common.game.objecten.Spel;
import be.hogent.iii.project.common.gameroom.objecten.GameRoomData;
import be.hogent.iii.project.server.netwerk.Client;
import be.hogent.iii.project.server.netwerk.Server;
import com.thoughtworks.xstream.XStream;

/**
 *
 * @author jef donders
 */
public class ServerGameStartBerichtHandler implements BerichtHandler {

    public ServerGameStartBerichtHandler() {

    }

    public void handle(Bericht bericht) {
        GameStartBericht gameStartBericht = GameStartBericht.class.cast(bericht);
        System.out.println("er wordt een spel gestart");

        XStream xStream = new XStream();
        String msg = xStream.toXML(gameStartBericht);
        Spel spel = gameStartBericht.getSpel();
        Server.getServer().maakPool(spel.getId());
        if (spel.getDeelnemers() != null) {
            for (int i = 0; i < spel.getDeelnemers().size(); i++) {
                Server.getServer().voegClientToeAanPool(spel.getId(), spel.getDeelnemers().get(i).getNick());
                Server.getServer().verwijderClientUitPool("mainChat", spel.getDeelnemers().get(i).getNick());
            }
        }
        System.out.println("Wie zit er in pool: mainChat?");
        for (int i = 0; i < Server.getServer().getPool("mainChat").getClients().size(); i++) {
            Client client = (Client) Server.getServer().getPool("mainChat").getClients().get(i);
            System.out.println(client.getNickname());
        }
        System.out.println("Wie zit er in pool: " + spel.getId());
        for (int i = 0; i < Server.getServer().getPool(spel.getId()).getClients().size(); i++) {
            Client client = (Client) Server.getServer().getPool(spel.getId()).getClients().get(i);
            System.out.println(client.getNickname());
        }
        Server.getServer().stuurBerichtNaarPool(spel.getId(), msg);

        GameVolgendeBeurtBericht volgendeBeurt = new GameVolgendeBeurtBericht();
        volgendeBeurt.setNicknameAanbeurt(gameStartBericht.getSpel().getEigenaar().getNick());
        msg = xStream.toXML(volgendeBeurt);
        Server.getServer().stuurBerichtNaarPool(spel.getId(), msg);

        GameRoomData.getGameRoomData().getSpelenlijst().getSpelenlijst().remove(spel);
        for(int i = 0; i < spel.getDeelnemers().size(); i++){
            GameRoomData.getGameRoomData().getSpelerslijst().getSpelerslijst().remove(spel.getDeelnemers().get(i));
        }
        
        SpelenLijstBericht spelenbericht = new SpelenLijstBericht(GameRoomData.getGameRoomData().getSpelenlijst());
        SpelersLijstBericht spelersbericht = new SpelersLijstBericht(GameRoomData.getGameRoomData().getSpelerslijst());
        Server.getServer().stuurBerichtNaarPool("mainChat", xStream.toXML(spelenbericht));
        Server.getServer().stuurBerichtNaarPool("mainChat", xStream.toXML(spelersbericht));
    }
}
